package com.cskaoyan.javase.oop3._2inner._1member._0introduction;


/**
 * 成员内部类是最普通的内部类，它定义在另一个类的成员位置， 可以看成该类的一个成员。
 *
 * 成员内部类和其它内部类最大的不同点在于：
 * 成员内部类可以看成外围类的一个成员-->
 * 要想创建得到一个成员内部类对象,必须先创建外围类对象,因为成员内部类对象会持有外围类对象的引用作为自身的成员变量
 * --->
 * 这说明,要想得到成员内部类对象, 必须先创建外围类对象,然后在外围类对象的基础上才能得到成员内部类对象
 * 所以成员内部类对象和它的外围类对象之间是强依赖关系,但是注意是成员内部类对象需要依赖于外围类对象
 * 没有外围类对象,就没有成员内部类对象
 * 但反过来不成立
 * 没有成员内部类对象,外围类对象照样存在
 *
 * 语法：
 * //外围类
 * [访问权限修饰符] class EnclosedClazz{
 * //成员内部类
 *   [访问权限修饰符] class InnerClazz{
 *  }
 * }
 *
 * 成员内部类的自身特点：
 * 主要从以下几个角度分析：
 *      1.访问权限修饰符，四种访问级别都行
 *      2.成员特点
 *          成员内部类当中没有static声明，但是允许存在那些不触发类初始化的全局常量的定义。
 *      3.继承和实现
 *          可以继承内部/外部，可以实现内部/外部，大家可以结合实际情况去使用
 *          思考：
 *          一个成员内部类，能不能让一个外部类去继承它呢？
 *          是可以的，但是需要考虑一些额外的东西。
 *
 * @since 10:00
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

// 外围类
class EnclosedClazz {

    private interface IA{}
    private abstract class BaseA{}

    // 成员内部类
    class InnerClazz extends Object {
        private int a;
        int b = 10;
        static final int NUM = 10;
        static final String VAR = "hello";
        // static final String VAR2 = new String("hello");
        // static int c = 20;
        // static void testStatic(){}
        // static {}

        {

        }
        public InnerClazz() {
        }

        public void test(){

        }
    }
}